# -*- coding: utf-8 -*-
"""
@Time    : 2024/6/27 15:32 
@Author  : ZhangShenao 
@File    : custom_iterator.py 
@Desc    : 自定义迭代器
"""
from typing import Iterable


class PowOfTwo(Iterable):
    """
    自定义迭代器
    从n=0开始,每次返回2^n的值,直到n=10时结束
    """

    def __init__(self):
        """构造函数"""

        # 初始化指数值=0
        self.__exponent = 0

    def __next__(self):
        """迭代器实现,获取下一个元素"""

        if self.__exponent > 10:  # 当指数值>10时,终止迭代,抛出StopIteration异常
            raise StopIteration

        # 返回2^n的值,并增加指数值
        result = 2 ** self.__exponent
        self.__exponent += 1
        return result

    def __iter__(self):
        """实现迭代器的__iter__方法,返回当前迭代器对象本身"""

        return self


if __name__ == '__main__':
    # 创建自定义迭代器对象
    pow_of_two = PowOfTwo()

    # 使用for循环遍历迭代器
    for i in pow_of_two:
        print(i, end='\t')
